import org.junit.Test;

import java.util.*;
import java.util.stream.Collectors;

public class leetcodeResult0930 {

    @Test
    public void test() {
        int[] nowFlower = {1,0,0,0,1,0,0};
        int n = 1;
        System.out.println(canPlaceFlowers(nowFlower, n));
    }

    /**
     * 1431. 拥有最多糖果的孩子
     * 简单
     * 相关标签
     * premium lock icon
     * 相关企业
     * 提示
     * 有 n 个有糖果的孩子。给你一个数组 candies，其中 candies[i] 代表第 i 个孩子拥有的糖果数目，和一个整数 extraCandies 表示你所有的额外糖果的数量。
     *
     * 返回一个长度为 n 的布尔数组 result，如果把所有的 extraCandies 给第 i 个孩子之后，他会拥有所有孩子中 最多 的糖果，那么 result[i] 为 true，否则为 false。
     *
     * 注意，允许有多个孩子同时拥有 最多 的糖果数目
     */
    public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
        int max = Integer.MIN_VALUE;
        for (int candy : candies) {
            if (candy > max) {
                max = candy;
            }
        }
        List<Boolean> result = new LinkedList<>();
        for (int candy : candies) {
            if(candy + extraCandies >= max){
                result.add(true);
            }else {
                result.add(false);
            }
        }
        return result;
    }

    /**
     * 605. 种花问题
     * 简单
     * 相关标签
     * premium lock icon
     * 相关企业
     * 假设有一个很长的花坛，一部分地块种植了花，另一部分却没有。可是，花不能种植在相邻的地块上，它们会争夺水源，两者都会死去。
     *
     * 给你一个整数数组 flowerbed 表示花坛，由若干 0 和 1 组成，其中 0 表示没种植花，1 表示种植了花。另有一个数 n ，能否在不打破种植规则的情况下种入 n 朵花？能则返回 true ，不能则返回 false 。
     */
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        Stack<Integer> integerStack = new Stack<>();
        List<Integer> integerList = new LinkedList<>();
        //将flowerbed赋值给integerList
        for (int j : flowerbed) {
            integerList.add(j);
        }
        integerList.add(0);
        int canPutFlowerCount = 0;
        integerStack.add(0);
        //如果连续出现三个零最大可插入花加1并且将栈清空，否则出现1会将栈清空
        for (int i = 0; i < integerList.size(); i++) {
            if (integerList.get(i) == 1 || i == integerList.size() - 1) {
                if (i == integerList.size() - 1) {
                    integerStack.add(integerList.get(i));
                }
                int listSize = integerStack.size();
                if (listSize == 3 || listSize == 4) {
                    canPutFlowerCount++;
                }else if ((listSize - 2) % 2 == 0) {
                    canPutFlowerCount += (listSize - 2) / 2;
                } else {
                    canPutFlowerCount += (listSize - 1) / 2;
                }
                integerStack.clear();
            } else {
                integerStack.add(integerList.get(i));
            }
        }
        return n <= canPutFlowerCount;
    }
}
